iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0
Software Development

.net6套件入門系列 第 13

[.net 6] System.Text.Json序列化範例

  • 分享至 

  • xImage
  •  

目的

不使用Newtonsoft.Json,改採.net6內建的System.Text.Json
System.Text.Json更著重在效能與安全性,大多數人應該都跟我一樣只會使用基本的序列化及反序列化。

同步更新於個人部落格
System.Text.Json序列化範例

1.建立新專案

選擇ASP.NET Core Web API專案範本,並執行下一步
步驟1

2.設定新的專案

命名你的專案名稱,並選擇專案要存放的位置。
步驟2

3.其他資訊

直接進行下一步
步驟3

4.編輯WeatherForecastController檔案

將預設的API註解,寫入新的Action,預設不會引用System.Text.Json,記得在最上面using
步驟4-1

    /// <summary>
    /// 序列化
    /// </summary>
    /// <returns></returns>
    [HttpGet("JsonSerialize")]
    public ActionResult JsonSerialize() {
      var Test = new TestClass() {
        Name = "中文名",
        Age = 18
      };
      var Result = JsonSerializer.Serialize(Test);
      return Ok(Result);
    }
    /// <summary>
    /// 反序列化
    /// </summary>
    /// <returns></returns>
    [HttpGet("JsonDeserialize")]
    public ActionResult JsonDeserialize() {
      var jsonString = @"{""Name"":""中文名"",""Age"":18}";
      var Result = JsonSerializer.Deserialize<TestClass>(jsonString);
      return Ok(Result);
    }
    public class TestClass {
      public string Name { get; set; }
      public int Age { get; set; }
    }

步驟4-2

5.執行結果

  • 點選Try it out
    步驟5-1
  • 點選Execute
    步驟5-2
  • 查看執行結果1(序列化)
    步驟5-3
  • 查看執行結果2(反序列化)
    步驟5-4

延伸問題

在不做任何設定的情況下,內建的序列化會有些微差異

  • 序列化預設會將所有非ASCII轉為Unicode代碼,例如:中文名=>\u4E2D\u6587\u540D

使用ActionResult中的JsonResult回傳時會將開頭改為小寫

  • 反序列化後輸出為小寫的key(如結果2),原先的TestClass是大寫的Name與Age

兩個問題都會在另一個章節補充說明

參考

Compare Newtonsoft.Json to System.Text.Json, and migrate to System.Text.Json

範例檔

GitHub


上一篇
[.net 6] swagger授權範例(jwt token)
下一篇
[.net 6] 解決System.Text.Json序列化後會將所有非ASCII轉為Unicode
系列文
.net6套件入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
Wen Chien
iT邦新手 4 級 ‧ 2022-09-28 11:34:23

來關心隊友~~/images/emoticon/emoticon32.gif

0

我就是升3.1時,想說改用個Text.Json遇到那該死的unicode問題
估狗查了說在startup.cs加上某一串字後就可以~ 不過我嘗試都無效
只好繼續Newtonsoft.Json

billhuang iT邦研究生 5 級 ‧ 2022-10-12 08:50:23 檢舉

可以參考下一篇解決這個問題唷/images/emoticon/emoticon37.gif

看囉~~~~ 範例是單一設置
我原本想一勞永逸 設定全部都不轉Unicode 不過失敗XD

我要留言

立即登入留言